home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C / Applications / Telnet Server 1.0 / queues.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-01-14  |  2.1 KB  |  118 lines  |  [TEXT/KAHL]

  1. /*
  2. Copyright© 1994 Mikhail Fridberg. Part of this code is copyrighted by Steve Falkenburg
  3.  
  4. Telnet-based talk server/client
  5.     
  6. connection management is done through the use of Operating System queues to simplify tracking
  7. and usage.
  8. */
  9.  
  10. #include <CommResources.h>
  11. #include <Terminals.h>
  12. #include <Connections.h>
  13.  
  14. #include "const.h"
  15. #include "globals.h"
  16. #include "utils.h"
  17. #include "queues.h"
  18.  
  19. static    QHdr        gFreeQueue,gCompletedQueue,gConnectedQueue;        // our queue header structures
  20. static    MyQElem        gBufferPool[kNumBuffers];        // queue storage area is here
  21.  
  22.  
  23. /* initializes our queue handling scheme */
  24.  
  25. void InitQueues(void)
  26. {
  27.     short i;
  28.     
  29.     gFreeQueue.qFlags = 0;
  30.     gFreeQueue.qHead = 0;
  31.     gFreeQueue.qTail = 0;
  32.     
  33.     gCompletedQueue.qFlags = 0;
  34.     gCompletedQueue.qHead = 0;
  35.     gCompletedQueue.qTail = 0;
  36.     
  37.     gFree = kNumBuffers;
  38.     gRunning = gCompleted = 0;
  39.     gServiced = 0;
  40.  
  41.     gConnectedQueue.qFlags = 0;
  42.     gConnectedQueue.qHead = 0;
  43.     gConnectedQueue.qTail = 0;
  44.     
  45.     for (i=0; i<kNumBuffers; i++)
  46.         Enqueue(&gBufferPool[i],&gFreeQueue);
  47. }
  48.  
  49.  
  50. /* pulls a parameter block off of the unused queue to be used in a device manager call
  51. */
  52.  
  53. MyQElemPtr GetUnusedPBlock(void)
  54. {
  55.     MyQElemPtr retValue;
  56.     
  57.     retValue = (MyQElemPtr) gFreeQueue.qHead;
  58.     if (retValue) {
  59.         Dequeue(retValue,&gFreeQueue);
  60.         gFree--;
  61.     }
  62.     
  63.     return retValue;
  64. }
  65.  
  66.  
  67. /*    puts a parameter block back onto the unused queue to be picked up and used by someone else
  68. */
  69.  
  70. void RecycleFreePBlock(MyQElemPtr pBlock)
  71. {
  72.     Enqueue(pBlock,&gFreeQueue);
  73.     gFree++;
  74. }
  75.  
  76.  
  77. /*    pulls a parameter block off of the completed queue for processing by the caller
  78. */
  79.  
  80. MyQElemPtr GetCompletedPBlock(void)
  81. {
  82.     MyQElemPtr retValue;
  83.     
  84.     retValue = (MyQElemPtr) gCompletedQueue.qHead;
  85.     if (retValue) {
  86.         Dequeue(retValue,&gCompletedQueue);
  87.         gCompleted--;
  88.     }
  89.     
  90.     return retValue;
  91. }
  92.  
  93.  
  94. /*    queues a parameter block onto the completed queue.  this is normally called from completion
  95.     routines at interrupt time.
  96. */
  97.  
  98. void StoreCompletedPBlock(MyQElemPtr pBlock)
  99. {
  100.     Enqueue(pBlock,&gCompletedQueue);
  101.     gCompleted++;
  102. }
  103.  
  104.  
  105. void    StoreConnectedPBlock(MyQElemPtr    pBlock)
  106. {
  107.     Enqueue(pBlock,&gConnectedQueue);
  108.  
  109. }
  110.  
  111. MyQElemPtr    GetConnectedPBlock(void)
  112. {
  113.     return ((MyQElemPtr)(gConnectedQueue.qHead));
  114.  
  115. }
  116.  
  117.  
  118.